

//进度条
import nProgress from "nprogress";
import "nprogress/nprogress.css";
//环境变量对象
// console.log(process.env, "process.env");
//自己定义的环境变量的值
// console.log(process.env.VUE_APP_API, "process.env");
//引入Vuex
import store from "@/store"

//引入axios
import axios from "axios";
//创建axios实列  不同的实列对应不同的的后端接口
const instance = axios.create({
  //配置dev代理后 不需要baseURL
  // baseURL: "http://gmall-h5-api.atguigu.cn/",

  // import axios from 'axios';
  // axios.get('/api/versionInfo.json').then()
  // 实际访问的是  http://www.xxxx/app/versionInfo.json

  //使用环境变量，来区分当前的环境，并拿到代理的前缀  
  baseURL: process.env.VUE_APP_API,
  timeout: 10000,
})


// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  //config：是axios请求的配置对象
  // console.log(config, "请求拦截器配置对象");
  //发送请求触发进度条启动
  nProgress.start();

  //每次发送请求的时候，在header中携带用户临时标识
  const userTempId = store.state.user.userTempId
  config.headers.userTempId = userTempId

  //每次发送请求的时候，在header中携带用户token
  const token = store.state.user.token
  config.headers.token = token


  return config;
}, function (error) {
  // 对请求错误做些什么
  nProgress.done();
  return Promise.reject(error.message);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  // 对响应数据做点什么

  nProgress.done();
  //response是请求回来axios组装的数据,其中data属性是服务端响应的数据
  // console.log(response, "响应拦截器返回数据");
  //我们一定要在响应拦截器中返回一个数据,否则axios方法无法得到数据
  if (response.data.code === 200) {
    return response.data.data;
  } else {
    //自己封装一个错误对象
    return Promise.reject({ message: response.data.message });
  }
}, function (error) {
  // 对响应错误做点什么
  nProgress.done();
  //当响应失败,则处理失败情况,要返回一个失败的priomise实例
  return Promise.reject(error.message);
});

//暴漏实列
export default instance;
